#!/usr/bin/env bash
# ******************************************************
# Filename     : mysql5.7_master_slave.sh
# Last modified: 2022-12-14 12:18
# Version      :
# Author       : jack.zang
# Email        : jack_zang@126.com
# Description  :
# source <(curl -sL https://gitee.com/jack_zang/public-scripts/raw/master/shell/mysql/mysql5.7_master_slave.sh)
#
# ******************************************************

######################### mysql master 配置 #############################

## 创建从服务器使用的复制账号
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'repl'@'192.168.10.226' IDENTIFIED BY 'rePL123..';
FLUSH PRIVILEGES;

## my.cnf
cat >> /etc/my.cnf <<EOF
server-id=1
log-bin=master-bin
binlog-format=ROW
# 以下两个为可选选项，如果要保证数据不丢失最好在清理binlog之前把要清理的日志备份，日志文件的大小根据磁盘的性能做适当的调整
expire_logs_days=7
max_binlog_size=1G
max_connections=1000
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
# 配置不同步的库
binlog-ignore-db=mysql
binlog-ignore-db=sys
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
EOF

systemctl restart mysqld

mysql -uroot -p
show master status;

######################### mysql slave 配置 #############################

# my.cnf
cat >> /etc/my.cnf <<EOF
server_id=2
log_bin=slave-bin
relay_log=slave-relay-bin
log_slave_updates=1
read_only=1
# 以下两个为可选选项，如果要保证数据不丢失最好在清理binlog之前把要清理的日志备份，日志文件的大小根据磁盘的性能做适当的调整
expire_logs_days=7
max_binlog_size=100m
replicate_ignore_db=information_schema
replicate_ignore_db=performance_schema
replicate_ignore_db=mysql
replicate_ignore_db=sys
EOF

systemctl restart mysqld

CHANGE MASTER TO MASTER_HOST='192.168.10.225',MASTER_USER='repl',MASTER_PASSWORD='rePL123..',MASTER_LOG_FILE='master-bin.000001',MASTER_LOG_POS=154;

start slave;
show slave status \G;

## 重点查看这两个选项为 yes：Slave_IO_Running=Yes Slave_SQL_Running=Yes


######################### mysql master slave 测试 配置 #############################
create database mydb;
use mydb;
create table mytab1(id int(10),name varchar(50),depid int(11));
insert into mytab1 (id, name, depid) values (1,'mcb', 2),(2,'zhangsan',3);

######################### mysql 主从同步可能出现的问题 #############################
# 基于局域网的Master/Slave机制在通常情况下已经可以满足“实时”备份的要求了。如果延迟比较大，可以从以下几个因素进行排查：
# (1) 网络延迟；
# (2) Master负载过高；
# (3) Slave负载过高；
# 如果出现同步失败，可以根据提示处理错误，处理完成后，需要刷新同步配置：
# 先停止同步
# mysql> stop slave;

# 清理掉之前的配置，防止同步已经同步了的数据
# mysql> reset slave all;

# 然后重新连接主库，进行同步


